package com.shujia

object Demo19List {
  def main(args: Array[String]): Unit = {
    val lines: List[String] = List("java,scala,hadoop,hive", "java,hadoop,spark", "hive,hadoop,java")

    //将每一行的多个单词展开，变成一行一个单词
    //1、使用循环实现
    for (line <- lines) {
      val split: Array[String] = line.split(",")
      for (word <- split) {
        println(word)
      }
    }
    //2、使用flatMap方法
    /**
     * flatMap
     * 将集合中的元素一个一个传递给后面的函数，函数返回值需要一个集合，flatmap会将函数返回的集合展开构建一个新的集合
     */
    val words: List[String] = lines.flatMap((line: String) => line.split(","))
    println(words)

    /**
     * map： 传入一行返回一行
     * flatMap： 传入一行返回多行
     * filter: 传入一行可能不返回
     * foreach: 循环列表
     * sortBy: 对数据进行排序
     * union： 很两个列表
     */

    //使用foreach循环遍历列表
    words.foreach((word: String) => println(word))
    words.foreach(word => println(word))
    words.foreach(println(_))

    //println是一个参数为Any返回值为空的函数
    //这里的foreach需要的是一个参数为String返回值为空的函数
    //面向函数编程也符合多态的用法，所以可以直接将println传递给foreach
    words.foreach(println)


    val list: List[Int] = List(12, 3, 3, 1, 2, 2, 1, 5, 5, 6, 6, 3, 1, 2, 4, 5)
    //sortBy: 通过一个字段对列表进行排序
    val sortList: List[Int] = list.sortBy((i: Int) => -i)
    println(sortList)


    val l1: List[Int] = List(1, 2, 3, 4, 5, 6)
    val l2: List[Int] = List(4, 5, 6, 7, 8, 9)
    //合并两个列表
    val unionList: List[Int] = l1.union(l2)
    println(unionList)

  }

}
